<?php
namespace Library;

/**
 * cookie
 * @category   cookie工具
 * @package    扩展库
 * @author     HuangYi
 * @copyright  Copyright (c) 2012-4-1——至今
 * @license    New BSD License
 * @version    $Id: cookie.class.php 版本号 2013-1-1  $
 *
 */
final class Cookie {
    private  $_prefix = "mk_"; //cookie前缀
    private  $_expire = 2592000; //cookie时间 30天
    private  $_path; //cookie路径
    private  $_domain = '';
    /**
     * 构造函数
     * @param null|string $domain  主域名
     * @param null|integer $expire 保存时间，默认为2592000; 30天
     * @param null|string $prefix 键名修饰，默认为"wy_"
     */
    public function __construct($domain=null,$expire=null,$prefix=null){
        if(!is_null($domain)) $this->_domain=$domain;
        $this->_path=TEMP.'/cookie/';
        if(!is_null($expire) ) $this->_expire=(int)$expire;
        if(!is_null($prefix) ) $this->_prefix=$prefix;
    }
    /**
    * 判断cookie变量是否存在
    * @access public
    * @param string $name   cookie的变量名
    * @return boolean
    */
    public function is_set($name) {
        if (!$name)  return false;
        return isset($_COOKIE[$this->_prefix.$name]);
    }
    /**
    * 获取某cookie变量的值
    * 获取的数值是进过64decode解密的,注:参数支持数组
    * @access public
    * @param string $name   cookie变量名
    * @return string
    */
    public  function get($name) {
        if (!$name) return false;
        return isset($_COOKIE[$this->_prefix.$name])
                ? unserialize(base64_decode($_COOKIE[$this->_prefix.$name]))
                : false;
    }
    /**
    * 设置某cookie变量的值
    * 注:这里设置的cookie值是经过64code加密过的,要想获取需要解密.参数支持数组
    * @access public
    * @param string $name       cookie的变量名
    * @param string $value      cookie值
    * @param int $expire     cookie所持续的有效时间,默认为30天.
    * @param string $path        cookie所存放的目录,默认为网站根目录
    * @param string $domain      cookie所支持的域名,默认为空
    * @return void
    */
    public function set($name, $value, $expire = null, $path = null, $domain = null) {
        if(is_null($expire)) $expire=$this->_expire ;
        $expire +=$_SERVER['REQUEST_TIME'];
        if(is_null($path) ) $path = $this->_path;
        if(is_null($domain) ) $domain = $this->_domain;
        //数据加密处理.
        $value = base64_encode(serialize($value));
        if (empty($domain)) {
            setcookie($this->_prefix.$name, $value, $expire, $path);
        } else {
            setcookie($this->_prefix.$name, $value, $expire, $path, $domain);
        }
        $_COOKIE[$this->_prefix.$name] = $value;
    }
    /**
    * 删除某个Cookie值
    * @access public
    * @param string $name   cookie的变量值
    * @return void
    */
    public function delete($name) {
        $this->set($name, '', 0-$this->_expire);
        unset($_COOKIE[$this->_prefix.$name]);
    }
    /**
    * 清空cookie
    * @access public
    * @return void
    */
    public function clear() {
        unset($_COOKIE);
    }
}